﻿#ifndef CROB_WAY_PLAN_DIALOG
#define CROB_WAY_PLAN_DIALOG
/********************************************************************************
** @ Date:2024/03/22
** @ Author: HanJiaXin
** @ Description:机器人巡检路径规划对话框，主要在此对话框对巡检点及巡检项进行管理
** @ Version:1.0.0
** @ ClassName:
** @ Fun:
********************************************************************************/
#include <QDialog>
#include <QStandardItemModel>
#include <QCloseEvent>
#include "CDevBase.h"
#include "CRBaseData.h"
#include "ui_CRobWayPlanDialog.h"

class CRobWayPlanDialog : public QDialog
{
	Q_OBJECT

public:
	CRobWayPlanDialog(QString sSceneGuid, CDevBase* pDev, CRBaseData* pBasicData,QWidget *parent = nullptr);
	~CRobWayPlanDialog();

protected:
	void closeEvent(QCloseEvent *event)override;//关闭对话时

private:
	void initUI();              //初始化ui界面
	void setVideoData();        //设置界面中视频监控类的数据
	void refushPointList();     //刷新界面中的巡检点树
	void refushMap();           //刷新界面中的巡检地图
	void setStyleSheetFile();   //设置样式文件
	void initConnect();         //初始化槽函数连接
	void setEmergencyStopDown();//设置急停按下样式
	void setEmergencyStopUp();  //设置急停松开样式

	bool setChargePoint(QString sPointGuid, int nSetValue);//设置巡检点是否为充电桩 0:否 1是

	void pasteItem(QString sPastePointGuid,QString sCopyPointGuid,QString sCopyItemGuid);//粘贴巡检项

public slots:
	void slotRefushData();                                 //定时器刷新槽函数
	void slotExpand();								       //全部展开
	void slotShrink();									   //全部收缩
	void slotEditPoint(int nVal);                          //编辑巡检点
	void slotMovePoint(int nVal);                          //移动巡检点
	void slotDelPoint(int nVal);                           //删除巡检点
	void slotAddPoint(QPointF pCurrPoint, int nLocation);  //添加巡检点
	void slotSelectedPoint(int nVal);					   //选中巡检点
	void slotMoveMent(int nXVal);						   //运动到指定点
	void slotCustomContextMenu(const QPoint &);			   //右键树节点
	void slotPushButtonEmergencyStopClicked();//点击急停槽函数
	void slotPushButtonAddClicked();          //点击拾取巡检点槽函数
	void slotPushButtonChangeClicked();       //点击编辑巡检点槽函数
	void slotPushButtonDeleteClicked();       //点击删除巡检点槽函数
	void slotPushButtonReChangeClicked();     //点击重新绘制巡检点槽函数
	void slotPushButtonSaveClicked();         //点击保存巡检点槽函数

	void slotPushButtonDeSpeedClicked();                   //减速按钮点击槽函数
	void slotPushButtonAddSpeedClicked();                  //加速按钮点击槽函数
	void slotPushButtonResetLocClicked();                  //复位按钮点击槽函数
	void slotPushButtonTalkBackFuncClicked();              //对讲开按钮槽函数
	void slotPushButtonTalkBackCloseClicked();             //对讲关按钮槽函数
	void slotPushButtonLampLightOpenClicked();             //灯光开按钮槽函数
	void slotPushButtonLampLightCloseClicked();            //灯光开按钮槽函数
	void slotPushButtonFocusingAddClicked();               //调焦+按钮槽函数
	void slotPushButtonFocusingAddRelease();               //调焦+按钮释放槽函数
	void slotPushButtonFocusingSubtractClicked();          //调焦-按钮槽函数
	void slotPushButtonFocusingSubtractRelease();          //调焦-按钮释放槽函数

	void slotRobRunUp();   //上 按下
	void slotRobRunDown(); //下 按下
	void slotRobRunRight();//前进 按下
	void slotRobRunLeft(); //后退 按下
	void slotRobRunStop(); //松开(停止)

	void slotYtUpP();      //云台 按下 上
	void slotYtDownP();    //云台 按下 下
	void slotYtRigthP();   //云台 按下 右
	void slotYtLeftP();    //云台 按下 左
	void slotYtUpR();      //云台 松开 上
	void slotYtDownR();    //云台 松开 下
	void slotYtRigthR();   //云台 松开 右
	void slotYtLeftR();    //云台 松开 左

private:
	bool upAreaCfg(CPolArea *pPolArea, QString &sReInfo);
	bool upPointCfg(CPolPoint *pPolPoint, QString &sReInfo);
	bool addItemCfg(CPolItem *pPolItem, QString &sReInfo);
	bool upItemCfg(CPolItem *pPolItem, QString &sReInfo);
public:
	QString m_sGuid;
	CDevBase* m_pDev;
	CRBaseData* m_pBasicData;
	CPolArea* m_pPolAreaOld;//巡检区域备份
	CDevDataBase* m_pDevData;
private:
	Ui::CRobWayPlanDialogClass ui;
	QStandardItemModel *m_pTreeModel;
	int m_nSpeed;//机器人设定速度（单位dm/s）
	bool m_bIsStopButtonClicked;//急停按钮当前是否被按下
	QTimer* m_pTimer;//刷新机器人实时位置定时器
	QString m_sCopyItemGuid;//需要复制的巡检项Guid
	QString m_sCopyPointGuid;//需要复制的巡检项所属的巡检点Guid
	int m_nIsMove;
};

#endif
